package com.example.userservice.controller;

import com.example.userservice.common.ApiResponse;
import com.example.userservice.entity.User;
import com.example.userservice.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户控制层（处理HTTP请求）
 * @RestController = @Controller + @ResponseBody（返回JSON）
 * @RequestMapping("/api/users")：所有接口的基础URL
 */
@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserService userService;

    /**
     * 根据ID查用户（GET请求）
     * @PathVariable("id")：从URL路径中获取参数（比如/api/users/1→id=1）
     */
    @GetMapping("/{id}")
    public ApiResponse<User> getById(@PathVariable("id") Long id) {
        User user = userService.getById(id);
        return ApiResponse.success(user);
    }

    /**
     * 查所有用户（GET请求）
     */
    @GetMapping
    public ApiResponse<List<User>> listAll() {
        List<User> users = userService.listAll();
        return ApiResponse.success(users);
    }

    /**
     * 根据用户名模糊查询用户（GET请求）
     * @PathVariable("name")：从URL路径中获取用户名
     */
    @GetMapping("/name/{name}")
    public ApiResponse<List<User>> listByNameLike(@PathVariable("name") String name) {
        List<User> users = userService.listByNameLike(name);
        return ApiResponse.success(users);
    }

    /**
     * 新增用户（POST请求）
     * @RequestBody：把请求体的JSON转换成User对象
     */
    @PostMapping
    public ApiResponse<User> save(@RequestBody User user) {
        User savedUser = userService.save(user);
        return ApiResponse.success(savedUser);
    }

    /**
     * 修改用户（PUT请求）
     * @PathVariable("id")：URL中的ID
     * @RequestBody：请求体的JSON
     */
    @PutMapping("/{id}")
    public ApiResponse<User> update(@PathVariable("id") Long id, @RequestBody User user) {
        // 确保URL中的ID和请求体中的ID一致
        user.setId(id);
        User updatedUser = userService.update(user);
        return ApiResponse.success(updatedUser);
    }

    /**
     * 删除用户（DELETE请求）
     */
    @DeleteMapping("/{id}")
    public ApiResponse<Void> remove(@PathVariable("id") Long id) {
        userService.remove(id);
        return ApiResponse.success();
    }
} 